\subsection{Instrucciones de Compilación}

En ésta sección se detalla la forma de compilar el código del trabajo práctico. El código fuente del trabajo práctico fue entregado siguiendo las pautas fijadas por los docentes del Laboratorio de Métodos Numéricos, tanto en la entrega electrónica, como así también en el soporte que acompaña la entrega física.

Para compilar el proyecto se recomienda la utilización de la herramienta make disponible en prácticamente toda versión de Unix\textsuperscript{\textregistered}, como así también en Microsoft Windows.

Las instrucciones de compilación que se detallan en esta sección se han probado en el sistema operativo Ubuntu 13.10.

Para realizar la compilación del proyecto se ha utilizado en todos los casos el compilador GCC. La versión del compilador incluída en cada sistema puede variar. Es por este motivo, y por el uso de características del nuevo estándar C++ que se require una versión reciente del compilador GCC. La versión incluída en Ubuntu 13.10 es la 4.7.3. El proyecto requiere como mínimo la versión 4.6 de GCC. La versión recomendada es la 4.7 o superior.

En plataforma Microsoft Windows, se puede compilar el proyecto utilizando o bien Visual Studio 2010 Service Pack 1, o Visual Studio 2012. Los archivos de proyectos y la compilación en esta plataforma se ha realizado utilizando Visual Studio 2012. En ambas entregas se incluyen archivos de proyecto y solución de Visual Studio 2012 que permiten construir los ejecutables del proyecto. Sin embargo, sólo en la entrega física se incluyen las dependencias del proyecto en formato binario. Estas dependencias son necesarias tanto para la compilación como para la ejecución de los ejecutables del proyecto.

Si bien se puede realizar la compilación de manera manual, dicho procedimiento resulta tedioso. A continuación, se procederá a describir la forma que utiliza la herramienta make, la cual muestra por consola todas las instrucciones que se ejecutan con el fin de generar los archivos ejecutables del proyecto. Cabe aclarar que no se muestran pasos intermedios, tales como la creación de directorios.

El proyecto cuenta con un archivo Makefile que la herramienta make utilizará para compilar el proyecto. Para compilar todo el proyecto basta situarse en el directorio raíz del mismo, el cual contiene el archivo Makefile, e invocar a la herramienta make. Para cuando la herramienta make ha finalizado su trabajo, se habrá creado un directorio bin debajo del direcotrio raíz, que contendrá un archivo denominado TP1MetNum, el cual es el ejecutable del proyecto. Así mismo, se creará un archivo denominado TP1MetNumTests que permite ejecutar los tests de unidad del proyecto.

Es importante mencionar que con motivo de un mejor aprovechamiento de los recursos(ancho de banda, espacio de almacenamiento, etc.); la versión del proyecto que se ha adjuntado en la entrega electrónica no tiene las dependencias del proyecto. No obstante, el código es completamente funcional, pudiéndose generar los ejecutables de la misma manera que con la versión que contiene todas las dependencias que se ha copiado en el CD de la entrega física. La diferencia radica en que al no poseer las dependencias, el proceso de construcción intentará conectarse a Internet para bajar y construir las dependencias. Este proceso puede tomar bastante tiempo, dependiendo de la velocidad de conexión y el proder de cómputo con el que se cuente en la computadora donde se desea construir el software. Además, si se intenta construir el proyecto en plataforma Windows, se deberán bajar las dependencias de forma manual y construir las mismas. Debido a que los archivos de proyecto para Visual Studio 2012 incluídos, no soportan el bajado y construcción de las dependencias de manera automática. Por estos motivos, aconsejamos construir el proyecto utilizando la versión que se ha adjuntado en la entrega física. Sin embargo, no debería haber ningún inconveniente para la construcción del proyecto utilizando la versión de la entrega electrónica, al menos bajo plataforma Unix\textsuperscript{\textregistered}.

Para construir el proyecto en plataforma Linux, basta con situarse en el directorio raíz del proyecto y ejecutar la herramienta make con el objetivo ``all''.

El archivo Makefile contiene varios objetivos que la herramienta make puede construir. A continuación, detallaremos cada uno de ellos:

\begin{itemize}
	\item \textbf{all}: Este objetivo construye tanto el ejecutable del trabajo práctico, como así también el ejecutable para los tests de unidad del trabajo práctico. Ambos ejecutables se dejan en el directorio bin, debajo del directorio raíz del proyecto.

	\item \textbf{check}: Este objetivo ejecuta los test de unidad del trabajo práctico. En caso de ser necesario, el objetivo generará o actualizará de manera automática el ejecutable de los test de unidad del trabajo práctico.

	\item \textbf{clean}: Este objetivo elimina todos los ejecutables y archivos intermedios que se generan durante la construcción de los archivos ejecutables. Este objetivo elimina los directorios bin y obj que se crean en el directorio raíz del proyecto. Por este motivo, es imprescindible que de existir algún archivo de interés en alguno de esos directorios, el o los mismos sean copiados a algún otro lugar antes de invocar este objetivo.

	\item \textbf{distclean}: Este objetivo elimina los archivos que elimina el objetivo \textbf{clean} y además elimina los archivos que se han generado al construir las dependencias del proyecto. Este objetivo debe ser utilizado con cuidado, pues luego de ser eliminados los archivos de las dependencias, puede tomar bastante tiempo generarlos nuevamente.

	\item \textbf{doc-init}: Este objetivo inicializa archivos que \LaTeX\mbox{ }necesita para la generación de la tabla de contenidos. Su ejecución es necesaria la primera vez que se desea generar el informe. Luego, basta con utilizar el objetivo pdf para actualizar el informe.

	\item \textbf{help}: Este es el objetivo por default, se ejecuta cuando se invoca a la herramienta make con el objetivo help como parámetro, o aún cuando se invoca a la herramienta make sin parámetros. Este objetivo muestra por pantalla un mensaje donde se listan los objetivos disponibles.

	\item \textbf{main}: Este objetivo construye el ejecutable del trabajo práctico. Este objetivo deja el archivo ejecutable del trabajo práctico en el directorio bin, debajo del directorio raíz del proyecto.

	\item \textbf{pdf}: Este objetivo construye el archivo del informe del trabajo práctico que está leyendo en este momento.

	\item \textbf{realclean}: Este objetivo elimina todos los archivos generados por el proyecto y las dependencias, y además elimina los archivos que contienen las distribuciones de las dependencias. Luego de utlizar este objetivo, no sólo se deberán construir nuevamente las dependencias del proyecto, sino que además se deberá bajar a través de Internet los archivos que contienen las distribuciones de dichas dependencias.

	\item \textbf{test}: Este objetivo construye el ejecutable de los test de unidad del trabajo práctico. Este objetivo deja el archivo ejecutable de los test de unidad del trabajo práctico en el directorio bin, debajo del directorio raíz del proyecto.

	\item \textbf{viewpdf}: Este objetivo construye de ser necesario el archivo del informe del trabajo práctico y abre el mismo en el visualizador de archivos PDF por defecto.

\end{itemize}
